#include <iostream>
#include <string>

using namespace std;

/*
调用父类的有参构造
    需要再子类的构造函数中 显性的调用 父类 构造函数

如果子类没有显性调用
    则 父类会自动调用 自己的无参构造  <父类必须有无参构造 否则会报错>
调用顺序
    有参构造 先进行父类 构造函数 再进行 子类构造函数
    无参构造 先进行父类 构造函数 再进行 子类构造函数
*/


class person
{

public:     // 公共类型
    int A;
protected:  // 保护类型
    int B;
private:    // 私有类型
    int C;

public:
    person(){
        cout << "基类 空 构造 " << endl;
    }
    person(int A , int B , int C) : A(A) , B(B) , C(C)
    {
        cout << "基类 有参 构造 " << endl;
    }

    void set_C(int C)
    {
        this->C = C;
    }
};


class Student : private person
{
public:
    int D;
    int E;
public:
    Student(int A , int B , int C , int D , int E) : person(A , B , C) , D(D) , E(E)
    {
        cout << "派生类 有参 构造 " << endl;
    }
    Student()
    {
         cout << "派生类 空 构造 " << endl;
    }

};





int main(int argc, char const *argv[])
{
    Student S1(10 , 20 , 30 , 40 , 50);

    
    return 0;
}
